package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.DidEmissaoDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class DidEmissao implements Serializable {

	private String id = "";
	private Long regGeralEmitido = 0L;
	private Integer tipReg = 0;
	private Integer dataEmissao = 0;
	private String nomeIdent = "";
	private Long numeroSerieRg = 0L;
	private Integer horaEmissaoCarteira = 0;
	private Integer matriculaFunc = 0;
	private Integer numpos = 0;
	private String ufeder = "";
	private ResultSet consulta = null;
	private DidEmissaoDAO didEmissaoDAO = new DidEmissaoDAO();

	public DidEmissao() {
		super();
	}

	public DidEmissao(String id, Long regGeralEmitido, Integer tipReg, Integer dataEmissao, String nomeIdent, Long numeroSerieRg, Integer horaEmissaoCarteira, Integer matriculaFunc, Integer numpos, String ufeder) {
		super();
		this.id = id;
		this.regGeralEmitido = regGeralEmitido;
		this.tipReg = tipReg;
		this.dataEmissao = dataEmissao;
		this.nomeIdent = nomeIdent;
		this.numeroSerieRg = numeroSerieRg;
		this.horaEmissaoCarteira = horaEmissaoCarteira;
		this.matriculaFunc = matriculaFunc;
		this.numpos = numpos;
		this.ufeder = ufeder;
	}

	public void grava() {

		try {
			this.id = didEmissaoDAO.insert(regGeralEmitido, tipReg, dataEmissao, nomeIdent, numeroSerieRg, horaEmissaoCarteira, matriculaFunc, numpos, ufeder);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean leituraDataEmissaoFaixa(Integer pDataEmissao1, Integer pDataEmissao2) {

		try {
			if (consulta == null) {
				consulta = didEmissaoDAO.readDataEmissaoin(pDataEmissao1, pDataEmissao2);
			} else {
				consulta = didEmissaoDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraDataEmissaoFaixaMatriculaFuncTipReg(Integer pDataEmissao1, Integer pDataEmissao2, Integer pMatriculaFunc, Integer pTipReg) {

		try {
			if (consulta == null) {
				consulta = didEmissaoDAO.readDataEmissaoinMatriculaFuncTipReg(pDataEmissao1, pDataEmissao2, pMatriculaFunc, pTipReg);
			} else {
				consulta = didEmissaoDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraDataEmissaoFaixaTipReg(Integer pDataEmissao1, Integer pDataEmissao2, Integer pTipReg) {

		try {
			if (consulta == null) {
				consulta = didEmissaoDAO.readDataEmissaoinTipReg(pDataEmissao1, pDataEmissao2, pTipReg);
			} else {
				consulta = didEmissaoDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(didEmissaoDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.regGeralEmitido = lista.getLong("regGeralEmitido");
			this.tipReg = lista.getInt("tipReg");
			this.dataEmissao = lista.getInt("dataEmissao");
			this.nomeIdent = lista.getString("nomeIdent");
			this.numeroSerieRg = lista.getLong("numeroSerieRg");
			this.horaEmissaoCarteira = lista.getInt("horaEmissaoCarteira");
			this.matriculaFunc = lista.getInt("matriculaFunc");
			this.numpos = lista.getInt("numpos");
			this.ufeder = lista.getString("ufeder");
		} catch (SQLException e) {
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Long getRegGeralEmitido() {
		return regGeralEmitido;
	}

	public void setRegGeralEmitido(Long regGeralEmitido) {
		this.regGeralEmitido = regGeralEmitido;
	}

	public Integer getTipReg() {
		return tipReg;
	}

	public void setTipReg(Integer tipReg) {
		this.tipReg = tipReg;
	}

	public Integer getDataEmissao() {
		return dataEmissao;
	}

	public void setDataEmissao(Integer dataEmissao) {
		this.dataEmissao = dataEmissao;
	}

	public String getNomeIdent() {
		return nomeIdent;
	}

	public void setNomeIdent(String nomeIdent) {
		this.nomeIdent = nomeIdent;
	}

	public Long getNumeroSerieRg() {
		return numeroSerieRg;
	}

	public void setNumeroSerieRg(Long numeroSerieRg) {
		this.numeroSerieRg = numeroSerieRg;
	}

	public Integer getHoraEmissaoCarteira() {
		return horaEmissaoCarteira;
	}

	public void setHoraEmissaoCarteira(Integer horaEmissaoCarteira) {
		this.horaEmissaoCarteira = horaEmissaoCarteira;
	}

	public Integer getMatriculaFunc() {
		return matriculaFunc;
	}

	public void setMatriculaFunc(Integer matriculaFunc) {
		this.matriculaFunc = matriculaFunc;
	}

	public Integer getNumpos() {
		return numpos;
	}

	public void setNumpos(Integer numpos) {
		this.numpos = numpos;
	}

	public String getUfeder() {
		return ufeder;
	}

	public void setUfeder(String ufeder) {
		this.ufeder = ufeder;
	}

	public void fecha() {
		didEmissaoDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return didEmissaoDAO.nroRegistro;
	}

	public long totalRegistros() {
		return didEmissaoDAO.qtdRegistros;
	}

}
